Current graphics data processing includes systems and method developed to perform specific operations on graphics data such as, for example, linear interpolation, tessellation, rasterization, texture mapping, depth testing, etc. Traditionally, graphics processors used fixed function computational units to process graphics data; however, more recently, portions of graphics processors have been made programmable, enabling such processors to support a wider variety of operations for processing vertex and fragment data.
To further increase performance, graphics processors typically implement processing techniques such as pipelining and then attempt to process graphics data in parallel in the different parts of the graphics pipeline. Such techniques allow graphics resources and computation results to be shared, thereby increasing processing efficiency. Inflexible parallel processing of graphics data, however, limits the performance of graphics processors, especially if the processing is synchronous. For example, allowing a subset of the graphics data to diverge to execute a conditional branch, a jump, call return or the like may be preferable under certain conditions.
Accordingly, it would be desirable to provide graphics processing techniques that retain the efficiencies of synchronous processing, but also accommodate these types of divergences.